/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Validador;

import Beans.Horario;
import Beans.Usuario;
import Daos.UsuarioDao;

/**
 *
 * @author aluno
 */
public class ValidaUsuario {

    public ValidaUsuario(Usuario usuario) {
        nome = usuario.getNome();
        email = usuario.getEmail();
        telefone1 = usuario.getTelefone1();
        telefone2 = usuario.getTelefone2();
        senha = usuario.getSenha();
        login = usuario.getLogin();

        inicializaMensagensCampo();//inicializa mensagens de erro
        validadorGenerico = new ValidadorGenerico();//inicializa validador generico

    }
    private String nome;
    private String email;
    private String telefone1;
    private String telefone2;
    private String senha;
    private String login;
    private int codErro = 0;
    private ValidadorGenerico validadorGenerico;
    private Usuario usuario;

    private void devolveStringsSemEspacos() {
        nome = validadorGenerico.retiraEspacosEmBranco(nome);
        email = validadorGenerico.retiraEspacosEmBranco(email);
        telefone1 = validadorGenerico.retiraEspacosEmBranco(telefone1);
        telefone2 = validadorGenerico.retiraEspacosEmBranco(telefone2);
        senha = validadorGenerico.retiraEspacosEmBranco(senha);
        login = validadorGenerico.retiraEspacosEmBranco(login);
    }

    public boolean validaNome() {
        if (!validadorGenerico.validaCampoVazioOuNulo(nome)) {
            codErro = 1;
            setaMensagemsDeErro(codErro);
            System.out.println(codErro);
            return false;
        } else {
            return true;
        }

    }

    public boolean validaEmail() {
        if (!validadorGenerico.validaCampoVazioOuNulo(email) || !validadorGenerico.validaFormatoDoEmail(email)) {
            codErro = 2;
            setaMensagemsDeErro(codErro);
            System.out.println(codErro);
            return false;
        } else {
            return true;
        }

    }

    public boolean validaTelefone1() {
        if (!validadorGenerico.validaCampoVazioOuNulo(telefone1) || !validadorGenerico.aceitaApenasNumerosECom10Caracteres(telefone1)) {
            codErro = 3;
            setaMensagemsDeErro(codErro);
            System.out.println(codErro);
            return false;
        } else {
            return true;
        }
    }

    public boolean validaTelefone2() {
        if (!validadorGenerico.validaCampoVazioOuNulo(telefone2) || !validadorGenerico.aceitaApenasNumerosECom10Caracteres(telefone2)) {
            codErro = 4;
            setaMensagemsDeErro(codErro);
            System.out.println(codErro);
            return false;
        } else {
            return true;
        }
    }

    public boolean validaSenha() {
        if (!validadorGenerico.validaCampoVazioOuNulo(senha)) {
            codErro = 5;
            setaMensagemsDeErro(codErro);
            System.out.println(codErro);
            return false;
        } else {
            return true;
        }
    }

    public boolean validaLogin() {
        if (!validadorGenerico.validaCampoVazioOuNulo(login)) {
            codErro = 6;
            setaMensagemsDeErro(codErro);
            System.out.println(codErro);
            return false;
        } else {
            return true;
        }
    }
    String[] mensagensCampos = new String[6];

    private void inicializaMensagensCampo() {
        mensagensCampos[0] = "Nome valido";
        mensagensCampos[1] = "Email valido";
        mensagensCampos[2] = "Telefone1 valido";
        mensagensCampos[3] = "Telefone2 valido";
        mensagensCampos[4] = "Login valido";
        mensagensCampos[5] = "Senha valida";
    }

    public Usuario retornaObjetoValidado() {
        return usuario;
    }

    public String[] getMensagensCampos() {

        return mensagensCampos;
    }

    public void setaMensagemsDeErro(int codErro) {

        //   String mensagem = "Nenhum erro Encontrado";

        switch (codErro) {
            case 1:
                mensagensCampos[0] = "Nome inválido";
                break;
            case 2:
                mensagensCampos[1] = "Email inválido";
                break;
            case 3:
                mensagensCampos[2] = "Telefone1 inválido";
                break;
            case 4:
                mensagensCampos[3] = "Telefone2 inválido";
                break;
            case 5:
                mensagensCampos[4] = "Senha inválida";
                break;
            case 6:
                mensagensCampos[5] = "Login inválido";
                break;
        }
        //  return mensagem;
    }

    public boolean validaTodosOsCampos() {

        if (validaNome()
                && validaEmail()
                && validaSenha()
                && validaTelefone1()
                && validaTelefone2()
                && validaLogin()) {
            return true;
        } else {
            return false;
        }
//        validaNome();
//        validaEmail();
//        validaSenha();
//        validaTelefone1();
//        validaTelefone2();
//        validaLogin();
    }

    public void gravarDadosNoBanco() {

        validaTodosOsCampos();

        if (codErro == 0) { //se nao detectar nenhum problema, salva no banco
            devolveStringsSemEspacos();//retira espaços em branco
            usuario = new Usuario(nome, email, telefone1, telefone2, senha, login);
            new UsuarioDao(usuario).persist();
        }
        setaMensagemsDeErro(codErro);//seta mensagem de erro
        System.out.println(codErro);
        //   return mensagemsDeErro(codErro);//retorna mensagem

    }

    /**
     * @return the nome
     */
    public String getNome() {
        return nome;
    }

    /**
     * @return the email
     */
    public String getEmail() {
        return email;
    }

    /**
     * @return the telefone1
     */
    public String getTelefone1() {
        return telefone1;
    }

    /**
     * @return the telefone2
     */
    public String getTelefone2() {
        return telefone2;
    }

    /**
     * @return the senha
     */
    public String getSenha() {
        return senha;
    }

    /**
     * @return the login
     */
    public String getLogin() {
        return login;
    }

    public static void main(String[] args) {

        Usuario usuario = new Usuario("william", "williambartko@gmail.com", "4435236992", "4488022822", "aaaa", "williamBartko");
//        Usuario usuario = new Usuario(null, null, null, null, null, null);
//        usuario.setNome("william");
//        usuario.setEmail("williambartko@gmail.com");
//        usuario.setLogin("william");
//        usuario.setSenha("asdfg");
//        usuario.setTelefone1("4435236992");
//        usuario.setTelefone2("4435236993");

        //       new UsuarioDao(usuario).persist();

        ValidaUsuario validaUsuario = new ValidaUsuario(usuario);

        validaUsuario.gravarDadosNoBanco();

        for (int i = 0; i < validaUsuario.getMensagensCampos().length; i++) {
            String campo[] = validaUsuario.getMensagensCampos();
            System.out.println(campo[i]);
            System.out.println("===============================================");

        }




    }
}


